﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MIAP.DataAccess.Interfaces;
using MIAP.Entidades;

namespace MIAP.Negocio
{
    /// <summary>
    /// Clase de negocio para las opeaciones de AltaProyectos.
    /// </summary>
    public class AltaProyectosNegocio
    {
        /// <summary>
        /// Instancia para el acceso a datos de Administración de Proyectos.
        /// </summary>
        private readonly IProyectosDao daoProyectos;

        /// <summary>
        /// Instancia para el acceso a datos de Periodos de carga.
        /// </summary>
        private readonly IPeriodoCargaDao daoPeriodoCarga;

        /// <summary>
        /// Instancia para el acceso a datos de periodos de Informacion.
        /// </summary>
        private readonly IPeriodoInformacionDao daoPeriodoInformacion;

        #region Constructor

        /// <summary>
        /// Inicializa una nueva instancia <see cref="AltaProyectosNegocio"/>
        /// </summary>
        public AltaProyectosNegocio()
        {
            this.daoProyectos = DataAccessFactory.Instance.CreateProyectosDao();
            this.daoPeriodoCarga = DataAccessFactory.Instance.CreatePeriodoCargaDao();
            this.daoPeriodoInformacion = DataAccessFactory.Instance.CreatePeriodoInformacionDao();
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Obtiene todos los periodos de carga registrados en el sistema
        /// </summary>
        /// <returns></returns>
        public IList<PeriodoInfo> GetPeriodosCarga()
        {
            return this.daoPeriodoCarga.GetPeriodosCarga();
        }

        /// <summary>
        /// Obtiene todos los periodos de informacion registrados en el sistema
        /// </summary>
        /// <returns></returns>
        public IList<PeriodoInfo> GetPeriodosInformacion()
        {
            return this.daoPeriodoInformacion.GetPeriodosInformacion();
        }

        /// <summary>
        /// Agrega un nuevo proyeto
        /// </summary>
        /// <param name="proyecto"></param>
        /// <param name="user"></param>
        public void AddNewProyecto(ProyectoInfo proyecto, string user)
        {
            this.daoProyectos.AddNewProyecto(proyecto, user);
        }


        /// <summary>
        /// Agrega un nuevo proyeto
        /// </summary>
        /// <param name="proyecto"></param>
        /// <param name="user"></param>
        public void EditProyecto(ProyectoInfo proyecto, string user)
        {
            this.daoProyectos.EditProyecto(proyecto, user);
        }
        /// <summary>
        /// Obtiene la información de un proyecto dependiendo del id.
        /// </summary>
        /// <param name="idProyecto">Es el id del proyecto del cual se obtendrá la información.</param>
        /// <returns>Información del proyecto.</returns>
        public ProyectoInfo GetProyectoById(int idProyecto)
        {
            return this.daoProyectos.GetProyectoById(idProyecto);
        }

        /// <summary>
        /// Verifica la existencia del proyecto.
        /// </summary>
        /// <param name="nombreProyecto">Nombre del proyecto que se desea agregar.</param>
        /// <returns>Indicador de si el proyecto existe o no.</returns>
        public bool VerifyExistProyecto(string nombreProyecto)
        {
            return this.daoProyectos.VerifyExistProyecto(nombreProyecto);
        }

        #endregion
    }
}
